﻿using System;
using System.Collections.Generic;
using TPDiseño.Clases_de_Entidad;
using DAO.DataSetConsultoraTableAdapters;

namespace DAO
{
    public class DAOCompetencia_Ponderada : DAO
    {
        //Atributos de manejo de instancia (singleton)
        static DAOCompetencia_Ponderada instance = null; 
         // Atributos para acceso a los DataSet Tipados
        private Competencia_PonderadaTableAdapter Competencia_PonderadaTableAdapter = new Competencia_PonderadaTableAdapter();
        private DataSetConsultora.Competencia_PonderadaDataTable Competencia_PonderadasTabla = new DataSetConsultora.Competencia_PonderadaDataTable();
        // Dependencias de otros DAOs
        private DAOCompetencia miDAOCompetencia = DAOCompetencia.Instance;

        public static DAOCompetencia_Ponderada Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new DAOCompetencia_Ponderada();
                        }
                    }
                }
                return instance;
            }
        }

        public PuestoCompetencia guardar(PuestoCompetencia unCompetencia_Ponderada, int id_puesto)
        {

            // Inserto un puestoCompetencia o competencia ponderada en la db por medio de su table adapter
            Competencia_PonderadasTabla = Competencia_PonderadaTableAdapter.Insertar(unCompetencia_Ponderada._ponderacion, id_puesto, unCompetencia_Ponderada._competencia._cod_comp);

            // Finalmente lo retorno
            return recolectarUno();

        }

        public List<PuestoCompetencia> cargar(Int32 cod_puesto){

                             
            // Cargo los Competencia_Ponderada de la db
            Competencia_PonderadasTabla = Competencia_PonderadaTableAdapter.consultarPorPuesto(cod_puesto);

            return recolectar();
        }

        public List<PuestoCompetencia> recolectar() {
            // Creo la lista para recolectar y devolver las Competencia_Ponderadas cargadas de la db
            List<PuestoCompetencia> Competencia_PonderadasCargadas = new List<PuestoCompetencia>();


            // Recorro los Competencia_Ponderadas de la tabla
            foreach (DataSetConsultora.Competencia_PonderadaRow unCompetencia_PonderadaFila in Competencia_PonderadasTabla)
            {

                // Creo una Competencia_Ponderada y la agrego a la lista de Competencia_Ponderadas cargadas
                Competencia_PonderadasCargadas.Add(new PuestoCompetencia(miDAOCompetencia.cargar(unCompetencia_PonderadaFila.Competenciacod_comp),
                                                                                                 unCompetencia_PonderadaFila.ponderacion
                                                                        )
                                                  );

            }

            // Finalmente devuelvo la lista de Competencia_PonderadasCargadas            
            return Competencia_PonderadasCargadas;
        }
        
        private PuestoCompetencia recolectarUno()
        {
            return new PuestoCompetencia(miDAOCompetencia.cargar(Competencia_PonderadasTabla[0].Competenciacod_comp),
                                         Competencia_PonderadasTabla[0].ponderacion
                                        );
        }
    }


}
